--- /dev/null
+# Ansible-based tests.
+---
+- hosts: localhost
+ tags:
+ - atomic
+ remote_user: root
+ vars:
+ use_git_build: True
+ tests: "."
+ tasks:
+ - import_tasks: tasks/query-host.yml
+ - set_fact:
+ rpmostree_initial_deployment: "{{ rpmostree_status[\"deployments\"][0] }}"
+ - import_tasks: tasks/install-git.yml
+ when: use_git_build
+
+ - import_tasks: destructive/staged-deploy.yml
--- /dev/null
+# This entrypoint right now just runs shell-script based tests
+# from destructive/. Note that we `rpm-ostree usroverlay` git
+# builds. So it's not supported to reboot in these tests.
+# These tests will be run serially, and can e.g. change deployments.
+---
+- hosts: localhost
+ tags:
+ - atomic
+ remote_user: root
+ vars:
+ use_git_build: True
+ tests: "."
+ tasks:
+ - import_tasks: tasks/query-host.yml
+ - set_fact:
+ rpmostree_initial_deployment: "{{ rpmostree_status[\"deployments\"][0] }}"
+ - import_tasks: tasks/overlay-git.yml
+ when: use_git_build
+ # Next copy all of the tests/ directory
+ - name: Copy test data
+ synchronize: src=../../ dest=/root/tests/ archive=yes
+
+ - find:
+ paths: /root/tests/installed/destructive
+ patterns: "itest-*.sh"
+ register: all_tests
+ - set_fact:
+ selected_tests: "{{ all_tests.files|map(attribute='path') | select('match', tests) | list }}"
+ - assert:
+ that:
+ - "{{ selected_tests|length }} != 0"
+ - file: path=/root/logs state=directory
+ - block:
+ - name: Run destructive tests
+ shell: "{{ item }} &> /root/logs/$(basename {{ item }}).log"
+ with_items:
+ - "{{ selected_tests }}"
+ always:
+ - synchronize:
+ src: /root/logs/
+ dest: artifacts/installed-destructive
+ mode: pull
+++ /dev/null
-# This entrypoint right now just runs the sysinstalled-tests.
----
-- hosts: localhost
- tags:
- - atomic
- remote_user: root
- vars:
- use_git_build: True
- tests: "."
- tasks:
- - import_tasks: tasks/query-host.yml
- - set_fact:
- rpmostree_initial_deployment: "{{ rpmostree_status[\"deployments\"][0] }}"
- - import_tasks: tasks/overlay-git.yml
- when: use_git_build
- # Next copy all of the tests/ directory
- - name: Copy test data
- synchronize: src=../../ dest=/root/tests/ archive=yes
-
- # First, the Ansible-based tests
- - import_tasks: destructive/staged-deploy.yml
-
- - find:
- paths: /root/tests/installed/destructive
- patterns: "itest-*.sh"
- register: all_tests
- - set_fact:
- selected_tests: "{{ all_tests.files|map(attribute='path') | select('match', tests) | list }}"
- - assert:
- that:
- - "{{ selected_tests|length }} != 0"
- - file: path=/root/logs state=directory
- - block:
- - name: Run destructive tests
- shell: "{{ item }} &> /root/logs/$(basename {{ item }}).log"
- with_items:
- - "{{ selected_tests }}"
- always:
- - synchronize:
- src: /root/logs/
- dest: artifacts/installed-destructive
- mode: pull
- name: Write staged-deploy commit
shell: |
+ set -xeuo pipefail
cd /ostree/repo/tmp
# https://github.com/ostreedev/ostree/issues/1569
ostree checkout -H ${commit} t
orig_mtime=$(stat -c '%.Y' /sysroot/ostree/deploy)
ostree admin deploy --stage staged-deploy
new_mtime=$(stat -c '%.Y' /sysroot/ostree/deploy)
- assert_not_streq "${orig_mtime}" "${new_mtime}"
+ test "${orig_mtime}" != "${new_mtime}"
test -f /run/ostree/staged-deployment
ostree refs | grep -E -e '^ostree/' | while read ref; do
if test "$(ostree rev-parse ${ref})" = "${newcommit}"; then
- include_tasks: ../tasks/reboot.yml
- name: Check that deploy-staged service worked
shell: |
+ set -xeuo pipefail
# Assert that the previous boot had a journal entry for it
journalctl -b "-1" -u ostree-finalize-staged.service | grep -q -e 'Transaction complete'
# And there should not be a staged deployment
shell: rpm-ostree rollback
- include_tasks: ../tasks/reboot.yml
- shell: |
+ set -xeuo pipefail
rpm-ostree cleanup -rp
# Ensure we can unstage
- name: Write staged-deploy commit, then unstage
shell: |
+ set -xeuo pipefail
ostree admin deploy --stage staged-deploy
ostree admin status > status.txt
grep -qFe '(staged)' status.txt
environment:
commit: "{{ rpmostree_status['deployments'][0]['checksum'] }}"
-# Staged should be overwritten by non-staged
-- name: Write staged-deploy commit, then unstage
+- name: Staged should be overwritten by non-staged
shell: |
+ set -xeuo pipefail
ostree admin deploy --stage staged-deploy
test -f /run/ostree/staged-deployment
ostree --repo=/ostree/repo refs --create nonstaged-deploy "${commit}"
dn=$(cd $(dirname $0) && pwd)
# TODO: parallelize this
-PLAYBOOKS=${PLAYBOOKS:-nondestructive.yml destructive.yml}
+PLAYBOOKS=${PLAYBOOKS:-nondestructive.yml destructive-ansible.yml destructive-unit.yml}
for playbook in $PLAYBOOKS; do
time ${dn}/playbook-run.sh -v ${dn}/${playbook}
done
--- /dev/null
+# Use package layering to install git builds.
+- command: ostree --version
+ changed_when: False
+ register: ostree_orig_version
+- set_fact:
+ ostree_orig_version_yaml: "{{ ostree_orig_version.stdout | from_yaml }}"
+- name: Copy locally built RPMs
+ synchronize: src=build/x86_64/ dest=/root/x86_64/ archive=yes
+- name: Install RPMs
+ shell: rpm-ostree override replace /root/x86_64/*.rpm
+- include_tasks: ../tasks/reboot.yml
+- command: ostree --version
+ register: ostree_new_version
+- set_fact:
+ ostree_new_version_yaml: "{{ ostree_new_version.stdout | from_yaml }}"
+- name: "Fail if we didn't change the ostree version"
+ when: ostree_orig_version_yaml['libostree']['Git'] == ostree_new_version_yaml['libostree']['Git']
+ fail:
+ msg: "Failed to change ostree version"